<?php
// +----------------------------------------------------------------------
// | my
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2022 http://baiyf.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: $this <498944516@qq.com>
// +----------------------------------------------------------------------
namespace app\rob\model;

use think\Model;

class RobAnswer extends Model
{

    protected $table = "my_rob_answer";
    protected $insert = ['status'=>1];  
    protected $autoWriteTimestamp = true;
   

    /**
     * 获取机器人，微信被动响应的唯一入口
     * 微信开启的APP优先
     * 查询自定义机器人
     * 如果是客服时间则转人工客服
     * 最后到图灵机器人
     * 这个逻辑过程中会对进入和输出的关键词做解析！！！！！！！
     * 参数
     * keyword 关键字
     * data 参数信息数组
     * getType 是模糊匹配还是精准匹配
     * getApp  是否内置应用优先，默认优先。
     * */
    public function info($keyword="my",$data=[],$getType=0,$getApp=true ){
    
         // 对用户的keyword进行关键词处理，从而实现变量功能
       
        $keyword=$this->replace($keyword,$data);
       
          //优先应用处理 TODO::应用这里应该缓存以提高效率
        if($getApp==true) {
          
            $app_reply=model('rob/RobApp')->info($keyword,$data);
            if ($app_reply) return $app_reply;
        }

       
        $map['rob']=['in',$data['options']['rob']];
        
        //默认为模糊查询，支持精准查询
        switch ($getType) {
            case 1:
                $map['keyword']=$keyword;
                break;
            case 2:
                $map['id']=$keyword;
                break;
            default:
                $map['keyword']=['like','%'.$keyword.'%'];
                break;
        }
       
      	$reply=$this->infoByMap($map,$data);
        

        if (!$reply) $reply=model('rob/WeRob')->turing($keyword);  //如果没有就使用图灵机器人

    	if (!isset($reply['type']))$reply['type']='text';  ///兼容直接返回
    	
        return $reply;
    }

    public function infoByMap($map="",$data=[]){

        $answer = $this->where($map)->find();
      
        if ($answer){
         switch ($answer['type']) {
            case 'text':
                $reply['type']='text';
                $reply['message']=$this->replace($answer['message'],$data);
                break;
            case 'news':
                $reply['type']='news';
                $articles=model('rob/RobNews')->info($answer['message'],$data);
                $reply['message']=$articles;
                break;
            case 'image':
                //开始以关键词为中心处理
                break;
            case 'more':
                $reply=model('rob/RobMore')->info($answer['message'],$data);
                break;
            
            default:
                $reply=$answer;
                break;
          }
          
          return $reply;
      }

    }



     //替换用户信息
     public function replace($string='',$data=[]){
      
       //	TODO::这里要区分企业号和微信号从而提高效率
        if (empty($data)) return $string;
        $replaces=[
        // 系统相关
        '{当前日期}'=>date('Y-m-d',time()),
        '{当前时间}'=>date('Y-m-d H:i:s',time()),
        // 特殊字符
        '</br>'=>"\n",
        // 粉丝相关
        '{粉丝ID}'=>$data['fans']['id'],
        '{粉丝OPENID}'=>$data['fans']['openid'],
        '{粉丝昵称}'=>$data['fans']['nickname'],
         // 微信设置相关
         
        ];
        // 循环替换
        foreach ($replaces as $key => $replace) {
        	 $string=str_replace($key,$replace, $string);
        }
        return $string;
     }

     public function editData(){

      $data=input("post.");
     
      if ($data['id']){
         $res = $this->allowField(true)->where('id',$data['id'])->update($data);
      }else{
         $res = $this->allowField(true)->data($data)->save();
      }
      
      return $res;
    }
   
}